package com.et114.modules.system.dictionary;

import java.util.Iterator;
import java.util.List;

//import com.et114.components.ehcache.EhCacheUtils;
import com.et114.core.dao.impl.BaseDAOImpl;
import com.et114.core.exception.CheckException;
import com.et114.core.utility.Validator;
import com.et114.modules.system.dictionary.vo.BizOption;
import com.et114.modules.system.dictionary.vo.BizType;

/**
 * @author daomingw mod guanhw
 */
public class DictionaryDaoImpl extends BaseDAOImpl implements IDictionaryDao {
	
	public void refreshBizDictionary ( ) throws Exception {
		DictionaryCache cache = DictionaryCache.getInstance ( );
		cache.refresh ( );
	}
	
	/*
	 * ����ֵ0 ����ɹ��� -1 ָ����ҵ��ʵ�巵�ص�bizOptionIdΪ��Ч(null)�� -2
	 * ������ҵ��ʵ������Ҫ��ҵ�������� -3 �����쳣���μ������־
	 * 
	 * @see com.et114.ecl.bizlets.dictionary.IDictionaryDao#getBizCodeDesc(com.et114.ecl.bizlets.dictionary.BizEntity)
	 */
	public int getBizCodeDesc ( BizEntity bizEntity ) throws Exception {
		int returnValue = - 1;
//		String optionId = bizEntity.getBizOptionId ( );
//		if ( Validator.isNull ( optionId ) ) {
//			return returnValue;
//		}
//		DictionaryCache cache = DictionaryCache.getInstance ( );
//		// �ȴӻ������ȡ
//		String optionName = cache.getBizOptionName ( optionId );
//		// δ��ȡ��������ݿ����ȡ
//		if ( optionName == null ) {
//			try {
//				BizOption bizOption = new BizOption ( );
//				bizOption.setOptionId ( optionId );
//				Object obj = load ( bizOption , "retrieveBizOption" );
//				if ( obj != null ) {
//					BizOption option = ( BizOption ) obj;
//					optionName = option.getOptionName ( );
//					returnValue = 0;
//				}
//			} catch ( DataAccessException e ) {
//				logger.error ( e.getMessage ( ) ,e  ) ; 
//				returnValue = - 3;
//				return returnValue;
//			}
//		} else { // �������ȡ
//			returnValue = 0;
//		}
//		bizEntity.setBizOptionName ( optionName );
		return returnValue;
	}
	
	/*
	 * ����ֵ0 ����ɹ��� -1
	 * ҵ��ѡ���б�bizEntityList���Ϸ������磺�б��а�Ĳ���BizEntity���� -2 ����ҵ��ʵ��ʧ��
	 * 
	 * @see com.et114.ecl.bizlets.dictionary.IDictionaryDao#getBizCodeDescInEntityList(java.util.List)
	 */
	public int getBizCodeDescInEntityList ( List bizEntityList )
			throws Exception {
		int returnValue = 0;
		if ( bizEntityList == null ) {
			throw new IllegalArgumentException ( "�Ƿ�����ҵ������б�Ϊ��!" );
		}
		for ( Iterator iter = bizEntityList.iterator ( ) ; iter.hasNext ( ) ; ) {
			Object obj = iter.next ( );
			if ( ! ( obj instanceof BizEntity ) )
				return - 1;
			BizEntity bizEntity = ( BizEntity ) obj;
			if ( getBizCodeDesc ( bizEntity ) != 0 ) // ���ȡҵ��ʵ������ҵ�����ѡ������ʧ��
				return - 2;
		}
		return returnValue;
	}
	
	/*
	 * ����ֵ0 ����ɹ��� -1 ָ����ҵ��ʵ�巵�ص�bizOptionIdΪ��Ч(null)�� -2
	 * ������ҵ��ʵ������Ҫ��ҵ�������� -3 �����쳣���μ������־
	 * 
	 * @see com.et114.ecl.bizlets.dictionary.IDictionaryDao#getBizCodePower(com.et114.ecl.bizlets.dictionary.BizEntity)
	 */
	public int getBizCodePower ( BizEntity bizEntity ) throws Exception {
		int returnValue = - 1;
//		String optionId = bizEntity.getBizOptionId ( );
//		if ( Validator.isNull ( optionId ) ) {
//			return returnValue;
//		}
//		DictionaryCache cache = DictionaryCache.getInstance ( );
//		// �ȴӻ������ȡ
//		Integer optionPower = cache.getBizOptionPower ( optionId );
//		// δ��ȡ��������ݿ����ȡ
//		if ( optionPower == null ) {
//			try {
//				BizOption bizOption = new BizOption ( );
//				bizOption.setOptionId ( optionId );
//				Object obj = load ( bizOption , "retrieveBizOption" );
//				if ( obj != null ) {
//					BizOption option = ( BizOption ) obj;
//					optionPower = option.getPower ( );
//					returnValue = 0;
//				} else
//					returnValue = - 2;
//			} catch ( DataAccessException e ) {
//				logger.error ( e.getMessage ( ) , e ) ; 
//				returnValue = - 3;
//				return returnValue;
//			}
//		} else { // �������ȡ
//			returnValue = 0;
//		}
//		bizEntity.setBizOptionPower ( optionPower );
		return returnValue;
	}
	
	/*
	 * ����ֵ0 ����ɹ��� -1
	 * ҵ��ѡ���б�bizEntityList���Ϸ������磺�б��а�Ĳ���BizEntity���� -2 ����ҵ��ʵ��ʧ��
	 * 
	 * @see com.et114.ecl.bizlets.dictionary.IDictionaryDao#getBizCodePowerInEntityList(java.util.List)
	 */
	public int getBizCodePowerInEntityList ( List bizEntityList )
			throws Exception {
		int returnValue = 0;
		if ( bizEntityList == null ) {
			throw new IllegalArgumentException ( "�Ƿ�����ҵ������б�Ϊ��!" );
		}
		for ( Iterator iter = bizEntityList.iterator ( ) ; iter.hasNext ( ) ; ) {
			Object obj = iter.next ( );
			if ( ! ( obj instanceof BizEntity ) )
				return - 1;
			BizEntity bizEntity = ( BizEntity ) obj;
			if ( getBizCodePower ( bizEntity ) != 0 ) // ���ȡҵ��ʵ������ҵ�����ѡ������ʧ��
				return - 2;
		}
		return returnValue;
	}
	
	public int addBizOption ( BizOption bizOption ) throws Exception {
		int returnValue = 0;
		String optionId = bizOption.getOptionId ( );
		if ( Validator.isNull ( optionId ) )
			insert ( bizOption , "insertBizOption" );
		return returnValue;
	}
	
	public int deleteBizOption ( String bizOptionId , boolean absDel )
			throws Exception {
		int returnValue = 0;
		if ( absDel ) {
			//BizOption bizOption = new BizOption ( );
			//bizOption.setOptionId ( bizOptionId );
			delete ( bizOptionId , "deleteBizOption" );
		}
		return returnValue;
	}
	
	public  int updateBizOption ( BizOption bizOption ) throws Exception {
		int returnValue = 0;
		update ( bizOption , "updateBizOption" );
		return returnValue;
	}
	
	public List retrieveBizOptionList ( String bizTypeKey , String status )
			throws Exception {
		BizOption bizOption = new BizOption ( );
		bizOption.setBizTypeKey ( bizTypeKey );
		if ( ! status.equals ( DictionaryCache.BIZOPTION_STATUS_ALL ) )
			bizOption.setStatus ( status );
		else
			bizOption.setStatus ( null );
		return queryList ( bizOption , "retrieveBizOptionList" );
	}
	
	public BizOption retrieveBizOption ( String bizOptionId ) throws Exception {
		BizOption bizOption = new BizOption ( );
		bizOption.setOptionId ( bizOptionId );
		return ( BizOption ) load ( bizOption , "retrieveBizOption" );
	}
	
	
	public void deleteBizOptionByBizType( String bizTypeKey ) throws Exception {
		delete ( bizTypeKey , "deleteBizOptionByBizType" );
	}
	
	public int deleteBizType ( String bizTypeId ) throws Exception {
		int returnValue = 0;
		delete ( bizTypeId , "deleteBizType" );
		return returnValue;
	}
	
	
	public String saveBizType( BizType bizType ) throws Exception { 
		  return (String)insert ( bizType , "insertBizType" );
	}
	
	public void updateBizType(  BizType bizType ) throws Exception {  
		update ( bizType , "updateBizType" );
	}

	

	
	public List retrieveBizTypeList ( ) throws Exception {
		return retrieveBizTypeList( new BizType() ) ;
	}
	
	public BizType retrieveBizType ( String bizTypeId ) throws Exception {
		BizType bizType = new BizType ( );
		bizType.setBizTypeId ( bizTypeId );
		return ( BizType ) load ( bizType , "retrieveBizType" );
	}
	
	public List getBizOptionRepeatList ( BizOption option ) throws Exception {
		List list;
		if ( Validator.isNull ( option.getOptionId ( ) ) )
			list = queryList ( option , "addOptionRepeatList" );
		else
			list = queryList ( option , "updOptionRepeatList" );
		return list;
	}
	
	public List getBizTypeRepeatList ( BizType type ) throws Exception {
		List list;
		if ( Validator.isNull ( type.getBizTypeId ( ) ) )
			list = queryList ( type , "addTypeRepeatList" );
		else
			list = queryList ( type , "updTypeRepeatList" );
		return list;
	}

	public Long countBizOption(BizOption option) throws CheckException {
		return getCount ( option , "countBizOption" );
	}

	public Long countBizType(String biztypekey) throws CheckException {
		return getCount ( biztypekey , "countBizType" );
	}
	
	public Long countBizOptionValue(BizOption option) throws CheckException {
		return getCount ( option , "countBizOptionValue" );
	}
	
	public BizType getBizTypeByKey(String bizTypeKey) throws CheckException {
		return (BizType)load( bizTypeKey,"getBizTypeByKey");
	}

	public List retrieveBizTypeList ( BizType bizType ) throws Exception {
		// TODO Auto-generated method stub
		return  queryList ( bizType , "retrieveBizTypeList" );
	}
	
}
